@echo off
setlocal enabledelayedexpansion

:: 设置控制台为 UTF-8，避免中文乱码
chcp 65001 >nul

:: 获取脚本所在目录（支持带空格和中文）
set "SCRIPT_DIR=%~dp0"
set "VERSION_FILE=%SCRIPT_DIR%version.txt"
set "ISS_FILE=%SCRIPT_DIR%installer\setup.iss"

:: 检查 version.txt 是否存在
if not exist "%VERSION_FILE%" (
    echo 错误: 找不到 version.txt 文件！
    echo 请确保该文件位于: "%VERSION_FILE%"
    exit /b 1
)

:: 读取 version.txt 第一行（去除首尾空格和 BOM）
for /f "usebackq tokens=* delims=" %%a in ("%VERSION_FILE%") do (
    set "RAW_VERSION=%%a"
    goto :read_done
)
:read_done

if not defined RAW_VERSION (
    echo 错误: version.txt 为空或无法读取！
    exit /b 1
)

:: 去除可能的 UTF-8 BOM（如果第一字符是 EF BB BF，这里用简单方式跳过）
set "VERSION=!RAW_VERSION!"
if "!VERSION:~0,1!"=="ï" (
    :: 可能是 BOM 开头，尝试跳过前几个字符（实际更推荐用 PowerShell 读）
    for /f "skip=0 delims=" %%L in ('powershell -Command "(Get-Content -Path '%VERSION_FILE%' -Encoding UTF8 -TotalCount 1).Trim()"') do (
        set "VERSION=%%L"
    )
) else (
    :: 正常情况：去除首尾空格
    for /f "tokens=* delims= " %%v in ("!VERSION!") do set "VERSION=%%v"
)

if not defined VERSION (
    echo 错误: 无法解析 version.txt 中的版本号！
    exit /b 1
)

echo 检测到版本号: !VERSION!

:: 使用 PowerShell 安全替换 setup.iss 中的 #define MyAppVersion 行
powershell -Command ^
    "$content = Get-Content -Path '%ISS_FILE%' -Encoding UTF8;" ^
    "$newContent = @();" ^
    "foreach ($line in $content) {" ^
    "  if ($line -match '^\s*#define MyAppVersion\s+') {" ^
    "    $newContent += '#define MyAppVersion \"%VERSION%\"'" ^
    "  } else {" ^
    "    $newContent += $line" ^
    "  }" ^
    "}" ^
    "Set-Content -Path '%ISS_FILE%' -Value $newContent -Encoding UTF8"

if errorlevel 1 (
    echo 错误: 替换 setup.iss 版本号失败！
    exit /b 1
)

echo 成功更新 installer\setup.iss 中的版本号为: !VERSION!
exit /b 0